package cn.tedu.collection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**本类用于进一步测试List接口*/
public class TestList2 {
    public static void main(String[] args) {
        List<String> list = new ArrayList();
        list.add("喜羊羊");
        list.add("懒羊羊");
        list.add("美羊羊");
        list.add("沸羊羊");
        list.add("小肥羊");
        list.add("肥牛卷");
        System.out.println(list);

        //测试集合的迭代
        /**集合的迭代方式
         * 1.for循环
         * 2.foreach循环
         * 3.iterator迭代器
         * 4.listIterator*/
        //方式一:因为List集合是有序的，元素是有下标的，所以可以根据下标进行遍历
        for (int i = 0; i <list.size() ; i++) {
            System.out.println(list.get(i));
        }
        System.out.println("*********分割线*********");
        //方式二:因为普通for循环写法复杂，效率低，所以使用高效for循环
        //格式:for(每轮遍历到的元素类型 元素名: 要遍历的数组/集合名){循环体}
        for (String s:list){
            System.out.println(s);
        }
        System.out.println("*********分割线*********");
        //方式三:使用的是从父接口Collection处继承过来的迭代器iterator
        Iterator<String> it = list.iterator();
        while (it.hasNext()){//只要hasNext()结果为true，说明还有下一个元素
            System.out.println(it.next());
        }
        System.out.println("*********分割线*********");
        //方式四:
        /**listIterator是List接口特有的迭代器
         * listIterator<E>--子接口--继承了父类的功能
         * 还有自己的特有功能，比如逆序遍历，但是并不常用用*/
        ListIterator<String> it2 = list.listIterator();
        while (it2.hasNext()){
            System.out.println(it2.next());
        }
        System.out.println("*********分割线*********");
        System.out.println("*********分割线*********");
        System.out.println("*********listIterator逆序遍历*********");
        System.out.println("listIterator逆序遍历");
        ListIterator<String> it2x = list.listIterator();
        while (it2x.hasNext()){//判断是否有下一个元素
            System.out.println(it.next());
            if (!it2x.hasNext()){//直到迭代器没有下一个元素可以迭代，到达末尾
                while (it2x.hasPrevious()){//判断是否有上一个元素
                    System.out.println(it2x.previous());//输出打印获得的元素
                }
                break;//终止循环，不然会一直从头到尾，再从尾到头迭代
            }
        }

    }
}
